using ServiceStack.Model;
using System;
using System.Collections;
using System.Collections.Generic;
namespace ServiceStack.Redis.Generic
{
	public interface IRedisList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IHasStringId, IHasId<string>
	{
		List<T> GetAll();
		List<T> GetRange(int startingFrom, int endingAt);
		List<T> GetRangeFromSortedList(int startingFrom, int endingAt);
		void RemoveAll();
		void Trim(int keepStartingFrom, int keepEndingAt);
		long RemoveValue(T value);
		long RemoveValue(T value, int noOfMatches);
		void AddRange(IEnumerable<T> values);
		void Append(T value);
		void Prepend(T value);
		T RemoveStart();
		T BlockingRemoveStart(TimeSpan? timeOut);
		T RemoveEnd();
		void Enqueue(T value);
		T Dequeue();
		T BlockingDequeue(TimeSpan? timeOut);
		void Push(T value);
		T Pop();
		T BlockingPop(TimeSpan? timeOut);
		T PopAndPush(IRedisList<T> toList);
	}
}
